<!DOCTYPE html>
<html lang="en" dir="auto">

<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>MySql基础 | Satti&#39;s Blog</title>
<meta name="keywords" content="MySql">
<meta name="description" content="关于MySql的基础知识笔记">
<meta name="author" content="Satti">
<link rel="canonical" href="https://Sattiluvcat.github.io/en/posts/java/mysql_base/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.7e9ce9a3511907366759fc84bf85a1c90488be146fc92950e4214c08e1a8cb7d.css" integrity="sha256-fpzpo1EZBzZnWfyEv4WhyQSIvhRvySlQ5CFMCOGoy30=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://Sattiluvcat.github.io/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://Sattiluvcat.github.io/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://Sattiluvcat.github.io/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://Sattiluvcat.github.io/apple-touch-icon.png">
<link rel="mask-icon" href="https://Sattiluvcat.github.io/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="en" href="https://Sattiluvcat.github.io/en/posts/java/mysql_base/">
<noscript>
    <style>
        #theme-toggle,
        .top-link {
            display: none;
        }

    </style>
    <style>
        @media (prefers-color-scheme: dark) {
            :root {
                --theme: rgb(29, 30, 32);
                --entry: rgb(46, 46, 51);
                --primary: rgb(218, 218, 219);
                --secondary: rgb(155, 156, 157);
                --tertiary: rgb(65, 66, 68);
                --content: rgb(196, 196, 197);
                --code-block-bg: rgb(46, 46, 51);
                --code-bg: rgb(55, 56, 62);
                --border: rgb(51, 51, 51);
            }

            .list {
                background: var(--theme);
            }

            .list:not(.dark)::-webkit-scrollbar-track {
                background: 0 0;
            }

            .list:not(.dark)::-webkit-scrollbar-thumb {
                border-color: var(--theme);
            }
        }

    </style>
</noscript><link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap" rel="stylesheet"><meta property="og:title" content="MySql基础" />
<meta property="og:description" content="关于MySql的基础知识笔记" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://Sattiluvcat.github.io/en/posts/java/mysql_base/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2024-10-22T23:32:08+08:00" />
<meta property="article:modified_time" content="2024-10-22T23:32:08+08:00" />

<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="MySql基础"/>
<meta name="twitter:description" content="关于MySql的基础知识笔记"/>


<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position":  1 ,
      "name": "文章",
      "item": "https://Sattiluvcat.github.io/en/posts/"
    }, 
    {
      "@type": "ListItem",
      "position":  2 ,
      "name": "Java💻",
      "item": "https://Sattiluvcat.github.io/en/posts/java/"
    }, 
    {
      "@type": "ListItem",
      "position":  3 ,
      "name": "MySql基础",
      "item": "https://Sattiluvcat.github.io/en/posts/java/mysql_base/"
    }
  ]
}
</script>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "MySql基础",
  "name": "MySql基础",
  "description": "关于MySql的基础知识笔记",
  "keywords": [
    "MySql"
  ],
  "articleBody": " 基本概念 RDBMS 关系型数据库 based on关系模型，多张二维表相互连接 sql操作分类 分类 全称 说明 DDL Data Definition Language 定义数据库、表、字段等 DML Manipulation 对表中数据进行增删改 DQL Query 查询表的记录 DCL Control 创建库用户 控制权限 启动与停止 net start mysql80 \u0026 net stop mysql80 MySql 开机自启，在cmd中可手动停止 mysql -u root -p\n-u 提示用户为 root，-p 提示将输入密码 SQL 基本 以分号结尾，行数不论，空格与缩进不论 不区分大小写，关键字最好大写 – 或 # 注释内容 多行注释 /* 内容 */ DDL DDL数据库操作 SHOW DATABASES; 查询所有数据库 SELECT DATABASE(); 查询当前（是在哪个）数据库 CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]; 创建数据库（括号内容可以不加 采用默认规则） charset utf8mb4 设定为容纳4个字节的utf8 在DataGrip中可以使用SCHEMA替代DATABASE DROP DATABASE [IF EXISTS] 数据库名; 删除数据库 USE 数据库名; 使用数据库 DDL表操作 查询 SHOW TABLES; 查询当前数据库所有表 DESC 表名 查询表结构 SHOW CREATE TABLE 表名 查询指定表的建表语句 创建 CREATE TABLE 表名( 字段1 字段1类型[COMMENT ‘中文’], 字段2 字段2类型[COMMENT ‘……’], …… 字段3 字段3类型[COMMENT ‘……’] )[COMMENT ‘……’]; 字段1 是表头名称，如name 字段1类型： 数值类型 tinyint,smallint,mediumint,int-4字节,bigint,float,double tinyint unsigned表示无符号 即正数范围 可指定double(m,n)，m表示最长位数，n表示小数点后最长位数 字符串 char(指定长度),varchar(指定长度), char为定长字符串，varchar变长(会计算所需空间是否需要变化) 日期 date,time,datetime,year,timestamp(截至2038年) 修改 ALTER TABLE 表名 ADD 字段名 字段类型 [COMMENT 注释] [约束]; 增加字段 ALTER TABLE 表名 MODIFY 字段名 新字段类型 [COMMENT 注释]; 修改字段类型 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新字段类型 [COMMENT 注释]; 修改字段名\u0026字段类型 ALTER TABLE 表名 RENAME TO 新表名 修改表名 删除 ALTER TABLE 表名 DROP 字段名; 删除字段 DROP TABLE [IF EXISTS] 表名; 删除表 TRUNCATE TABLE 表名; 删除并重新创建该表 DataGrip中字段翻译为列\nDML 添加数据 INSERT INTO 表名(字段名1,字段名2,…) VALUES (值1,值2,…); 指定字段添加数据 INSERT INTO 表名 VALUES (值1,值2,…); 全部字段添加数据 ==此处括号为分隔符号，不可省略，[]表示可以忽略== ==Sql 以某数据库为原点，若需修改某表，在指令中需指明该表名== 字符串与时间类型用 ‘…’ 表示 修改删除 UPDATE 表名 SET 字段名1=值1,字段名2=值2,…[WHERE 条件]; 条件可以写为 id=1 等 DELETE FROM 表名 [WHERE 条件] 不能删除某个对象中特定字段的值（只能删除行） 没有被物理删除 被标记为删除使其空间可被♻ DQL 用*表示显示所有信息，放在其它特殊检索内容前\n基本查询 SELECT 字段1，字段2，… FROM 表名; SELECT * FROM 表名 查询多个字段 SELECT 字段1 [AS 别名1],字段2 [AS 别名2],… FROM 表名; 设置别名(显示在搜索结果的表头) SELECT DISTINCT 字段列表 FROM 表名; 显示查询到的非重复结果 条件查询 SELECT 字段列表 FROM 表名 WHERE 条件列表 条件类型： 比较运算 \u003e,\u003c,\u003e=,\u003c=,\u003c\u003e或!=表示不等于 所有数据类型适用（包括日期） BETWEEN … AND … 含最大最小值的范围 前小后大 数据有先后顺序 IN(…) 列表中的值 LIKE 占位符 模糊匹配 _表示单字符 %表示任意个字符 可能把占位符放到 ’ ’ 中 IS NULL 或 IS NOT NULL 逻辑运算 AND 或 \u0026\u0026 OR 或 || NOT 或 ! 聚合函数\u0026分组查询 SELECT 聚合函数(字段列表) FROM 表名; 常见聚合函数： 函数 功能 count 统计数量 max 最大 min 最小 avg 平均 sum 求和 SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件]; “字段列表”可以写聚合函数\u0026搜索的字段名（可显示表头） 执行顺序：WHERE\u003e聚合函数\u003eHAVING 聚合函数(某) 别名 起别名方法 聚合函数多半可以直接写为 SUM(*) 排序查询 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2; 排序方式： ASC 升序(默认) DESC 降序 字段1，字段2有先后顺序 分页查询 SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数; 起始索引从0开始，为查询页的起始id 第一页可以写为 LIMIT 查询记录数 顺序 编写顺序： SELECT$\\rightarrow$FROM$\\rightarrow$WHERE$\\rightarrow$GROUP BY$\\rightarrow$HAVING$\\rightarrow$ORDER BY$\\rightarrow$LIMIT DCL 管理用户 USE mysql SELECT * FROM user 查询用户 CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’; 创建用户 主机名为 % 表示可在任意主机访问 ALTER USER ‘用户名’@‘主机名’ IDENTIFIED WITH mysql_native_password BY ‘新密码’; 修改密码 DROP USER ‘用户名’@‘主机名’; 删除用户 权限控制 常用权限类型： 权限 说明 ALL(PRIVILEGES) 所有权限 SELECT 查询 INSERT 插入 UPDATE 修改 DELETE 删除 ALTER 修改表 DROP 删除库/表/视图 CREATE 创建库/表 SHOW GRANTS FOR ‘用户名’@‘主机名’; 查询权限 GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘主机名’; 授予权限 权限列表写 ALL 作通配 REVOKE 权限列表 ON 数据库名.表名FROM ‘用户名’@‘主机名’; 撤销权限 数据库、表用***作通配 函数 使用 SELECT 函数 进行函数试验\n字符串函数 常用函数：\n函数 功能 CONCAT(S1,S2,…,Sn) 拼接字符串 LOWER(str) 全小写 UPPER(str) 全大写 LPAD(str,n,pad) pad从左填充str到n长度 RPAD(str,n,pad) pad从右填充str到n长度 TRIM(str) 去头尾空格 SUBSTRING(str,start,len) 返回str从start处起的len个字符 字符串从1开始 非0 主要结合前文语法进行应用 数值函数 常见函数：\n函数 功能 CEIL(x) 向上取整 FLOOR(x) 向下取整 MOD(x,y) x/y的模 RAND() 0~1内随机数 ROUND(x,y) x四舍五入 y位小数 日期函数 常见函数：\n函数 功能 CURDATE() 当前日期 CURTIME() 当前时间 NOW() 当前日期与时间 YEAR(date) 获得date的年份 MONTH(date) date的月份 DAY(date) date的日 DATE_ADD(date,INTERVAL expr type) date加上时间间隔expr后的时间 DATEDIFF(date1,date2) date1到date2的天数 DATE_ADD 中 expr 可为数字 type可为 DAY 流程控制函数 常用函数：\n函数 功能 IF(v,t,f) v为true返回t 否之为f IFNULL(value1,value2) v1不为空则返回v1 否之为v2 CASE WHEN [val1] THEN [res1] … ELSE [default] END v1真则返回res1 否之为d CASE [expr] WHEN [val1] THEN [res1] … ELSE [default] END expr等于v1返回res1 否之为d val1处不能并列多个val 用此类函数做筛选不用加where，格式为：==SELECT *,(CASE …) AS ‘别名’ FROM 表名== 约束 约束概述 目的：保证数据库中数据的正确有效与完整\n约束分类 约束 描述 关键字 非空约束 该字段数据不为null NOT NULL 唯一约束 该字段所有数据不重复 UNIQUE 主键约束 一行数据的唯一标识 非空且唯一 PRIMARY KEY 默认约束 未指定则采用默认值 DEFAULT 某 检查约束 保证字段满足某条件 CHECK id int PRIMARY KEY AUTO_INCREMENT主键且自动增长(多个约束用空格隔开) 作用于表中字段 创建/修改表时添加 一般把序号设为主键 外键约束 让两表数据建立连接 保证数据完整一致\n具有外键的表=子表 被关联的表=亲表\n格式：\n创建时添加 [CONSTRAINT] [外键名] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名) 修改时添加 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名) 外键名是给外键自定义的新名字 注意数据类型需完全相同 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; 删除外键\n[ON UPDATE 模式 ON DELETE 模式] 在添加语句后指定删除/更新模式\n模式 说明 NO ACTION 有外键则不允许更新 RESTRICT 同上 CASCADE 亲子表同时更新 SET NULL 亲表删除 子表设null SET DEFAULT 子表设为默认(Innodb不支持) 多表查询 多表关系 一对多：建立外键连接 eg.员工\u0026部门 多对多：建立第三表 至少包含两外键 分别关联两方主键 eg.学生\u0026课程 一对一：任意一方加外键 并设置为UNIQUE 多用于单表拆分 基础字段在一表 详情字段在另一表 UNIQUE 在定义id的时候添加 eg.用户\u0026用户详情 多表查询概述 并列多表时需要消除无效的笛卡尔积情况(指A*B) 分类： flowchart LR;\rtest((连接查询))\rtest--\u003e内连接\rtest--\u003e外连接\rtest--\u003e自连接\r多表查询--\u003etest\r多表查询--\u003e子查询\r外连接--\u003e左外连接\r外连接--\u003e右外连接 内连接 返回A B表的交集\nSELECT 字段列表 FROM 表1,表2 WHERE 条件 …; 隐式内连接 条件类似employee.dept_id=dept.id SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 …; 显式内连接 外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 …; 左外连接 查询左表与交集部分的数据 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 …; 左外连接 右表\u0026交集 自连接 SELECT 字段列表 FROM 表1 别名1 JOIN 表1 别名2 ON 条件 …; 可内连接也可外连接 联合查询 SELECT 字段列表 FROM 表1 … UNION [ALL] SELECT 字段列表 FROM 表2 …; 有ALL结果直接合并 无ALL去重 字段列表与类型相同 子查询（嵌套查询） 外部可以是INSERT/UPDATE/DELETE/SELECT 根据子查询结果的不同分类： 名称 意义 标量子查询 结果为单个值 列子查询 结果为一列 行子查询 为一行 表子查询 多行多列 可在WHERE/FROM/SELECT之后进行 列子查询 返回一列结果 常用操作符： 操作符 用途 ==IN== 集合范围之内 多选一 NOT IN 不在集合范围内 ANY 任意一个满足 SOME 同ANY ALL 所有值都满足 行子查询 常用操作符 =、\u003c\u003e、IN、NOT IN 可以用 (1200,1)=(salary,manager) 表示一一对应 表子查询 常用操作符 IN 事务 操作 简介：一组操作的集合 整体提交 自动开始 SELECT @@AUTOCOMMIT; 开始事务(自动提交) SELECT @@AUTOCOMMIT=0; …… COMMIT; 手动提交事务 ROLLBACK; 事务回滚 手动开始 START TRANSACTION; 开启事务 COMMIT; 提交事务 ROLLBACK; 回滚事务 特性 原子性 不可分割的最小操作单元 一致性 事务完成时所有数据保持一致状态 隔离性 数据库的隔离机制，事务进行不受外部并发操作影响 持久性 提交或回滚后，数据的改变是永久的 ==ACID模型== 并发事务问题 脏读 一个事务读到另一个事务未提交的数据 不可重复读 先后读取同一记录但数据不同 幻读 按条件查询数据，无对应数据行，但插入数据时发现该行数据已存在 事务隔离级别 分类： 隔离级别 脏读 不可重复读 幻读 READ UNCOMMITTED ✔ ✔ ✔ READ COMMITTED ✖ ✔ ✔ REPEATABLE READ(默认) ✖ ✖ ✔ SERIALIZABLE ✖ ✖ ✖ ORACLE默认READ COMMITTED 性能递减 安全性递增 SELECT @@TRANSACTION_ISOLATION; 查看事务隔离级别 SET [SESSION或GLOBAL] TRANSACTION ISOLATION LEVEL {隔离级别}; 设定隔离级别 SESSION为当前连接 GLOBAL为全局，不包含当前连接 ",
  "wordCount" : "4100",
  "inLanguage": "en",
  "datePublished": "2024-10-22T23:32:08+08:00",
  "dateModified": "2024-10-22T23:32:08+08:00",
  "author":[{
    "@type": "Person",
    "name": "Satti"
  }],
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://Sattiluvcat.github.io/en/posts/java/mysql_base/"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Satti's Blog",
    "logo": {
      "@type": "ImageObject",
      "url": "https://Sattiluvcat.github.io/favicon.ico"
    }
  }
}
</script>
</head>

<body class="" id="top">
<script>
    if (localStorage.getItem("pref-theme") === "dark") {
        document.body.classList.add('dark');
    } else if (localStorage.getItem("pref-theme") === "light") {
        document.body.classList.remove('dark')
    } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
        document.body.classList.add('dark');
    }

</script>

<header class="header">
    <nav class="nav">
        <div class="logo">
            <a href="https://Sattiluvcat.github.io/en/" accesskey="h" title="Satti&#39;s Blog (Alt + H)">
                <img src="https://Sattiluvcat.github.io/img/label.jpg" alt="" aria-label="logo"
                    height="35">Satti&#39;s Blog</a>
            <div class="logo-switches">
                <button id="theme-toggle" accesskey="t" title="(Alt + T)">
                    <svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
                    </svg>
                    <svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <circle cx="12" cy="12" r="5"></circle>
                        <line x1="12" y1="1" x2="12" y2="3"></line>
                        <line x1="12" y1="21" x2="12" y2="23"></line>
                        <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
                        <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
                        <line x1="1" y1="12" x2="3" y2="12"></line>
                        <line x1="21" y1="12" x2="23" y2="12"></line>
                        <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
                        <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
                    </svg>
                </button>
            </div>
        </div>
        <ul id="menu">
            <li>
                <a href="https://Sattiluvcat.github.io/en/search/" title="🔍搜索 (Alt &#43; /)" accesskey=/>
                    <span>🔍搜索</span>
                </a>
            </li>
            <li>
                <a href="https://Sattiluvcat.github.io/en/" title="🏠主页">
                    <span>🏠主页</span>
                </a>
            </li>
            <li>
                <a href="https://Sattiluvcat.github.io/en/posts" title="📔文章">
                    <span>📔文章</span>
                </a>
            </li>
            <li>
                <a href="https://Sattiluvcat.github.io/en/tags" title="📑标签">
                    <span>📑标签</span>
                </a>
            </li>
            <li>
                <a href="https://Sattiluvcat.github.io/en/lulu/" title="😽Lulu">
                    <span>😽Lulu</span>
                </a>
            </li>
            <li>
                <a href="https://Sattiluvcat.github.io/en/about/" title="😎关于">
                    <span>😎关于</span>
                </a>
            </li>
        </ul>
    </nav>
</header>
<main class="main">
<article class="post-single">
  <header class="post-header">
    <div class="breadcrumbs"><a href="https://Sattiluvcat.github.io/en/">Home</a>&nbsp;»&nbsp;<a href="https://Sattiluvcat.github.io/en/posts/">文章</a>&nbsp;»&nbsp;<a href="https://Sattiluvcat.github.io/en/posts/java/">Java💻</a></div>
    <h1 class="post-title entry-hint-parent">
      MySql基础
    </h1>
    <div class="post-description">
      关于MySql的基础知识笔记
    </div>
    <div class="post-meta"><span title='2024-10-22 23:32:08 +0800 CST'>2024-10-22</span>&nbsp;·&nbsp;9 min&nbsp;·&nbsp;Satti

</div>
  </header> <aside id="toc-container" class="toc-container wide">
    <div class="toc">
        <details  open>
            <summary accesskey="c" title="(Alt + C)">
                <span class="details">Table of Contents</span>
            </summary>

            <div class="inner"><ul>
                    <li>
                        <a href="#%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5" aria-label="基本概念">基本概念</a></li>
                    <li>
                        <a href="#%e5%90%af%e5%8a%a8%e4%b8%8e%e5%81%9c%e6%ad%a2" aria-label="启动与停止">启动与停止</a></li>
                    <li>
                        <a href="#sql" aria-label="SQL">SQL</a><ul>
                            
                    <li>
                        <a href="#%e5%9f%ba%e6%9c%ac" aria-label="基本">基本</a></li>
                    <li>
                        <a href="#ddl" aria-label="DDL">DDL</a><ul>
                            
                    <li>
                        <a href="#ddl%e6%95%b0%e6%8d%ae%e5%ba%93%e6%93%8d%e4%bd%9c" aria-label="DDL数据库操作">DDL数据库操作</a></li>
                    <li>
                        <a href="#ddl%e8%a1%a8%e6%93%8d%e4%bd%9c" aria-label="DDL表操作">DDL表操作</a><ul>
                            
                    <li>
                        <a href="#%e6%9f%a5%e8%af%a2" aria-label="查询">查询</a></li>
                    <li>
                        <a href="#%e5%88%9b%e5%bb%ba" aria-label="创建">创建</a></li>
                    <li>
                        <a href="#%e4%bf%ae%e6%94%b9" aria-label="修改">修改</a></li>
                    <li>
                        <a href="#%e5%88%a0%e9%99%a4" aria-label="删除">删除</a></li></ul>
                    </li></ul>
                    </li>
                    <li>
                        <a href="#dml" aria-label="DML">DML</a><ul>
                            
                    <li>
                        <a href="#%e6%b7%bb%e5%8a%a0%e6%95%b0%e6%8d%ae" aria-label="添加数据">添加数据</a></li>
                    <li>
                        <a href="#%e4%bf%ae%e6%94%b9%e5%88%a0%e9%99%a4" aria-label="修改删除">修改删除</a></li></ul>
                    </li>
                    <li>
                        <a href="#dql" aria-label="DQL">DQL</a><ul>
                            
                    <li>
                        <a href="#%e5%9f%ba%e6%9c%ac%e6%9f%a5%e8%af%a2" aria-label="基本查询">基本查询</a></li>
                    <li>
                        <a href="#%e6%9d%a1%e4%bb%b6%e6%9f%a5%e8%af%a2" aria-label="条件查询">条件查询</a></li>
                    <li>
                        <a href="#%e8%81%9a%e5%90%88%e5%87%bd%e6%95%b0%e5%88%86%e7%bb%84%e6%9f%a5%e8%af%a2" aria-label="聚合函数&amp;分组查询">聚合函数&amp;分组查询</a></li>
                    <li>
                        <a href="#%e6%8e%92%e5%ba%8f%e6%9f%a5%e8%af%a2" aria-label="排序查询">排序查询</a></li>
                    <li>
                        <a href="#%e5%88%86%e9%a1%b5%e6%9f%a5%e8%af%a2" aria-label="分页查询">分页查询</a></li>
                    <li>
                        <a href="#%e9%a1%ba%e5%ba%8f" aria-label="顺序">顺序</a></li></ul>
                    </li>
                    <li>
                        <a href="#dcl" aria-label="DCL">DCL</a><ul>
                            
                    <li>
                        <a href="#%e7%ae%a1%e7%90%86%e7%94%a8%e6%88%b7" aria-label="管理用户">管理用户</a></li>
                    <li>
                        <a href="#%e6%9d%83%e9%99%90%e6%8e%a7%e5%88%b6" aria-label="权限控制">权限控制</a></li></ul>
                    </li></ul>
                    </li>
                    <li>
                        <a href="#%e5%87%bd%e6%95%b0" aria-label="函数">函数</a><ul>
                            
                    <li>
                        <a href="#%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%87%bd%e6%95%b0" aria-label="字符串函数">字符串函数</a></li>
                    <li>
                        <a href="#%e6%95%b0%e5%80%bc%e5%87%bd%e6%95%b0" aria-label="数值函数">数值函数</a></li>
                    <li>
                        <a href="#%e6%97%a5%e6%9c%9f%e5%87%bd%e6%95%b0" aria-label="日期函数">日期函数</a></li>
                    <li>
                        <a href="#%e6%b5%81%e7%a8%8b%e6%8e%a7%e5%88%b6%e5%87%bd%e6%95%b0" aria-label="流程控制函数">流程控制函数</a></li></ul>
                    </li>
                    <li>
                        <a href="#%e7%ba%a6%e6%9d%9f" aria-label="约束">约束</a><ul>
                            
                    <li>
                        <a href="#%e7%ba%a6%e6%9d%9f%e6%a6%82%e8%bf%b0" aria-label="约束概述">约束概述</a></li>
                    <li>
                        <a href="#%e7%ba%a6%e6%9d%9f%e5%88%86%e7%b1%bb" aria-label="约束分类">约束分类</a></li>
                    <li>
                        <a href="#%e5%a4%96%e9%94%ae%e7%ba%a6%e6%9d%9f" aria-label="外键约束">外键约束</a></li></ul>
                    </li>
                    <li>
                        <a href="#%e5%a4%9a%e8%a1%a8%e6%9f%a5%e8%af%a2" aria-label="多表查询">多表查询</a><ul>
                            
                    <li>
                        <a href="#%e5%a4%9a%e8%a1%a8%e5%85%b3%e7%b3%bb" aria-label="多表关系">多表关系</a></li>
                    <li>
                        <a href="#%e5%a4%9a%e8%a1%a8%e6%9f%a5%e8%af%a2%e6%a6%82%e8%bf%b0" aria-label="多表查询概述">多表查询概述</a><ul>
                            
                    <li>
                        <a href="#%e5%86%85%e8%bf%9e%e6%8e%a5" aria-label="内连接">内连接</a></li>
                    <li>
                        <a href="#%e5%a4%96%e8%bf%9e%e6%8e%a5" aria-label="外连接">外连接</a></li>
                    <li>
                        <a href="#%e8%87%aa%e8%bf%9e%e6%8e%a5" aria-label="自连接">自连接</a></li>
                    <li>
                        <a href="#%e8%81%94%e5%90%88%e6%9f%a5%e8%af%a2" aria-label="联合查询">联合查询</a></li>
                    <li>
                        <a href="#%e5%ad%90%e6%9f%a5%e8%af%a2%e5%b5%8c%e5%a5%97%e6%9f%a5%e8%af%a2" aria-label="子查询（嵌套查询）">子查询（嵌套查询）</a><ul>
                            
                    <li>
                        <a href="#%e5%88%97%e5%ad%90%e6%9f%a5%e8%af%a2" aria-label="列子查询">列子查询</a></li>
                    <li>
                        <a href="#%e8%a1%8c%e5%ad%90%e6%9f%a5%e8%af%a2" aria-label="行子查询">行子查询</a></li>
                    <li>
                        <a href="#%e8%a1%a8%e5%ad%90%e6%9f%a5%e8%af%a2" aria-label="表子查询">表子查询</a></li></ul>
                    </li></ul>
                    </li></ul>
                    </li>
                    <li>
                        <a href="#%e4%ba%8b%e5%8a%a1" aria-label="事务">事务</a><ul>
                            
                    <li>
                        <a href="#%e6%93%8d%e4%bd%9c" aria-label="操作">操作</a></li>
                    <li>
                        <a href="#%e7%89%b9%e6%80%a7" aria-label="特性">特性</a></li>
                    <li>
                        <a href="#%e5%b9%b6%e5%8f%91%e4%ba%8b%e5%8a%a1%e9%97%ae%e9%a2%98" aria-label="并发事务问题">并发事务问题</a></li>
                    <li>
                        <a href="#%e4%ba%8b%e5%8a%a1%e9%9a%94%e7%a6%bb%e7%ba%a7%e5%88%ab" aria-label="事务隔离级别">事务隔离级别</a>
                    </li>
                </ul>
                </li>
                </ul>
            </div>
        </details>
    </div>
</aside>
<script>
    let activeElement;
    let elements;
    window.addEventListener('DOMContentLoaded', function (event) {
        checkTocPosition();

        elements = document.querySelectorAll('h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]');
         
         activeElement = elements[0];
         const id = encodeURI(activeElement.getAttribute('id')).toLowerCase();
         document.querySelector(`.inner ul li a[href="#${id}"]`).classList.add('active');
     }, false);

    window.addEventListener('resize', function(event) {
        checkTocPosition();
    }, false);

    window.addEventListener('scroll', () => {
        
        activeElement = Array.from(elements).find((element) => {
            if ((getOffsetTop(element) - window.pageYOffset) > 0 && 
                (getOffsetTop(element) - window.pageYOffset) < window.innerHeight/2) {
                return element;
            }
        }) || activeElement

        elements.forEach(element => {
             const id = encodeURI(element.getAttribute('id')).toLowerCase();
             if (element === activeElement){
                 document.querySelector(`.inner ul li a[href="#${id}"]`).classList.add('active');
             } else {
                 document.querySelector(`.inner ul li a[href="#${id}"]`).classList.remove('active');
             }
         })
     }, false);

    const main = parseInt(getComputedStyle(document.body).getPropertyValue('--article-width'), 10);
    const toc = parseInt(getComputedStyle(document.body).getPropertyValue('--toc-width'), 10);
    const gap = parseInt(getComputedStyle(document.body).getPropertyValue('--gap'), 10);

    function checkTocPosition() {
        const width = document.body.scrollWidth;

        if (width - main - (toc * 2) - (gap * 4) > 0) {
            document.getElementById("toc-container").classList.add("wide");
        } else {
            document.getElementById("toc-container").classList.remove("wide");
        }
    }

    function getOffsetTop(element) {
        if (!element.getClientRects().length) {
            return 0;
        }
        let rect = element.getBoundingClientRect();
        let win = element.ownerDocument.defaultView;
        return rect.top + win.pageYOffset;   
    }
</script>

  <div class="post-content"><p> </p>
<p> </p>
<h2 id="基本概念">基本概念<a hidden class="anchor" aria-hidden="true" href="#基本概念">#</a></h2>
<ol>
<li><em>RDBMS</em> 关系型数据库
based on关系模型，多张二维表<strong>相互连接</strong></li>
<li>sql操作分类
<table>
  <thead>
      <tr>
          <th>分类</th>
          <th style="text-align: center">全称</th>
          <th style="text-align: center">说明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DDL</td>
          <td style="text-align: center">Data Definition Language</td>
          <td style="text-align: center">定义数据库、表、字段等</td>
      </tr>
      <tr>
          <td>DML</td>
          <td style="text-align: center">Manipulation</td>
          <td style="text-align: center">对表中数据进行增删改</td>
      </tr>
      <tr>
          <td>DQL</td>
          <td style="text-align: center">Query</td>
          <td style="text-align: center">查询表的记录</td>
      </tr>
      <tr>
          <td>DCL</td>
          <td style="text-align: center">Control</td>
          <td style="text-align: center">创建库用户 控制权限</td>
      </tr>
  </tbody>
</table>
</li>
</ol>
<h2 id="启动与停止">启动与停止<a hidden class="anchor" aria-hidden="true" href="#启动与停止">#</a></h2>
<ol>
<li><em>net start mysql80</em> &amp; <em>net stop mysql80</em>
MySql 开机自启，在cmd中可手动停止</li>
<li><em>mysql -u root -p</em><br>
<em>-u</em> 提示用户为 root，<em>-p</em> 提示将输入密码</li>
</ol>
<h2 id="sql">SQL<a hidden class="anchor" aria-hidden="true" href="#sql">#</a></h2>
<h3 id="基本">基本<a hidden class="anchor" aria-hidden="true" href="#基本">#</a></h3>
<ol>
<li>以分号结尾，行数不论，空格与缩进不论</li>
<li>不区分大小写，关键字最好大写</li>
<li>&ndash; 或 # 注释内容
多行注释 /* 内容 */</li>
</ol>
<h3 id="ddl">DDL<a hidden class="anchor" aria-hidden="true" href="#ddl">#</a></h3>
<h4 id="ddl数据库操作">DDL数据库操作<a hidden class="anchor" aria-hidden="true" href="#ddl数据库操作">#</a></h4>
<ol>
<li><em>SHOW DATABASES;</em>
查询所有数据库</li>
<li><em>SELECT DATABASE();</em>
查询当前（是在哪个）数据库</li>
<li><em>CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];</em>
创建数据库（括号内容可以不加 采用默认规则）
<ul>
<li><em>charset utf8mb4</em> 设定为容纳4个字节的utf8</li>
<li>在<!-- raw HTML omitted -->DataGrip<!-- raw HTML omitted -->中可以使用<em>SCHEMA</em>替代<em>DATABASE</em></li>
</ul>
</li>
<li><em>DROP DATABASE [IF EXISTS] 数据库名;</em>
删除数据库</li>
<li><em>USE 数据库名;</em>
使用数据库</li>
</ol>
<h4 id="ddl表操作">DDL表操作<a hidden class="anchor" aria-hidden="true" href="#ddl表操作">#</a></h4>
<h5 id="查询">查询<a hidden class="anchor" aria-hidden="true" href="#查询">#</a></h5>
<ol>
<li><em>SHOW TABLES;</em>
查询当前数据库所有表</li>
<li><em>DESC 表名</em>
查询表结构</li>
<li><em>SHOW CREATE TABLE 表名</em>
查询指定表的建表语句</li>
</ol>
<h5 id="创建">创建<a hidden class="anchor" aria-hidden="true" href="#创建">#</a></h5>
<ol>
<li><em>CREATE TABLE 表名(
字段1 字段1类型[COMMENT &lsquo;中文&rsquo;],
字段2 字段2类型[COMMENT &lsquo;……&rsquo;],
……
字段3 字段3类型[COMMENT &lsquo;……&rsquo;]
)[COMMENT &lsquo;……&rsquo;];</em>
<ul>
<li>字段1 是表头名称，如name</li>
<li>字段1类型：</li>
<li><strong>数值类型</strong>
tinyint,smallint,mediumint,int-4字节,bigint,float,double
<ul>
<li><em>tinyint unsigned</em>表示无符号 即<strong>正数范围</strong></li>
<li>可指定<em>double(m,n)</em>，m表示最长位数，n表示小数点后最长位数</li>
</ul>
</li>
<li><strong>字符串</strong>
char(指定长度),varchar(指定长度),
<ul>
<li>char为定长字符串，varchar变长(会计算所需空间是否需要变化)</li>
</ul>
</li>
<li><strong>日期</strong>
date,time,datetime,year,timestamp(截至2038年)</li>
</ul>
</li>
</ol>
<h5 id="修改">修改<a hidden class="anchor" aria-hidden="true" href="#修改">#</a></h5>
<ol>
<li><em>ALTER TABLE 表名 ADD 字段名 字段类型 [COMMENT 注释] [约束];</em>
增加字段</li>
<li><em>ALTER TABLE 表名 MODIFY 字段名 新字段类型 [COMMENT 注释];</em>
修改字段类型</li>
<li><em>ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新字段类型 [COMMENT 注释];</em>
修改字段名&amp;字段类型</li>
<li><em>ALTER TABLE 表名 RENAME TO 新表名</em>
修改表名</li>
</ol>
<h5 id="删除">删除<a hidden class="anchor" aria-hidden="true" href="#删除">#</a></h5>
<ol>
<li><em>ALTER TABLE 表名 DROP 字段名;</em>
删除字段</li>
<li><em>DROP TABLE [IF EXISTS] 表名;</em>
删除表</li>
<li><em>TRUNCATE TABLE 表名;</em>
删除并重新创建该表</li>
</ol>
<blockquote>
<p>DataGrip中字段翻译为列</p>
</blockquote>
<h3 id="dml">DML<a hidden class="anchor" aria-hidden="true" href="#dml">#</a></h3>
<h4 id="添加数据">添加数据<a hidden class="anchor" aria-hidden="true" href="#添加数据">#</a></h4>
<ol>
<li><em>INSERT INTO 表名(字段名1,字段名2,…) VALUES (值1,值2,…);</em>
指定字段添加数据</li>
<li><em>INSERT INTO 表名 VALUES (值1,值2,…);</em>
全部字段添加数据
<ul>
<li>==此处括号为分隔符号，不可省略，[]表示可以忽略==</li>
<li>==Sql 以某数据库为原点，若需修改某表，在指令中需指明该表名==</li>
<li>字符串与时间类型用 &lsquo;…&rsquo; 表示</li>
</ul>
</li>
</ol>
<h4 id="修改删除">修改删除<a hidden class="anchor" aria-hidden="true" href="#修改删除">#</a></h4>
<ol>
<li><em>UPDATE 表名 SET 字段名1=值1,字段名2=值2,…[WHERE 条件];</em>
条件可以写为 <em>id=1</em> 等</li>
<li><em>DELETE FROM 表名 [WHERE 条件]</em>
不能删除某个对象中特定字段的值（只能删除行）
<ul>
<li>没有被物理删除 <strong>被标记为删除</strong>使其空间可被♻</li>
</ul>
</li>
</ol>
<h3 id="dql">DQL<a hidden class="anchor" aria-hidden="true" href="#dql">#</a></h3>
<p><em>用*表示显示所有信息，放在其它特殊检索内容前</em></p>
<h4 id="基本查询">基本查询<a hidden class="anchor" aria-hidden="true" href="#基本查询">#</a></h4>
<ol>
<li><em>SELECT 字段1，字段2，… FROM 表名;</em>
<em>SELECT * FROM 表名</em>
查询多个字段</li>
<li><em>SELECT 字段1 [AS 别名1],字段2 [AS 别名2],… FROM 表名;</em>
设置别名(显示在搜索结果的表头)</li>
<li><em>SELECT DISTINCT 字段列表 FROM 表名;</em>
显示查询到的<strong>非</strong>重复结果</li>
</ol>
<h4 id="条件查询">条件查询<a hidden class="anchor" aria-hidden="true" href="#条件查询">#</a></h4>
<ol>
<li><em>SELECT 字段列表 FROM 表名 WHERE 条件列表</em>
条件类型：
<ul>
<li><strong>比较运算</strong></li>
<li>&gt;,&lt;,&gt;=,&lt;=,&lt;&gt;或!=表示不等于 所有数据类型适用（包括<strong>日期</strong>）</li>
<li><em>BETWEEN … AND …</em> 含最大最小值的范围 <strong>前小后大</strong> 数据有先后顺序</li>
<li><em>IN(…)</em> 列表中的值</li>
<li><em>LIKE 占位符</em> 模糊匹配
<ul>
<li>_表示单字符 %表示任意个字符</li>
<li>可能把占位符放到 &rsquo; &rsquo; 中</li>
</ul>
</li>
<li><em>IS NULL</em> 或 <em>IS NOT NULL</em></li>
<li><strong>逻辑运算</strong></li>
<li><em>AND 或 &amp;&amp;</em></li>
<li><em>OR 或 ||</em></li>
<li><em>NOT 或 !</em></li>
</ul>
</li>
</ol>
<h4 id="聚合函数分组查询">聚合函数&amp;分组查询<a hidden class="anchor" aria-hidden="true" href="#聚合函数分组查询">#</a></h4>
<ol>
<li><em>SELECT 聚合函数(字段列表) FROM 表名;</em>
常见聚合函数：
<table>
  <thead>
      <tr>
          <th style="text-align: center">函数</th>
          <th style="text-align: center">功能</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">count</td>
          <td style="text-align: center">统计数量</td>
      </tr>
      <tr>
          <td style="text-align: center">max</td>
          <td style="text-align: center">最大</td>
      </tr>
      <tr>
          <td style="text-align: center">min</td>
          <td style="text-align: center">最小</td>
      </tr>
      <tr>
          <td style="text-align: center">avg</td>
          <td style="text-align: center">平均</td>
      </tr>
      <tr>
          <td style="text-align: center">sum</td>
          <td style="text-align: center">求和</td>
      </tr>
  </tbody>
</table>
</li>
<li><em>SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];</em>
“字段列表”可以写聚合函数&amp;搜索的字段名（可显示表头）
<ul>
<li>执行顺序：WHERE&gt;聚合函数&gt;HAVING</li>
<li><em>聚合函数(某) 别名</em> 起别名方法
<ul>
<li>聚合函数多半可以直接写为 <em>SUM(*)</em></li>
</ul>
</li>
</ul>
</li>
</ol>
<h4 id="排序查询">排序查询<a hidden class="anchor" aria-hidden="true" href="#排序查询">#</a></h4>
<ol>
<li><em>SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;</em>
排序方式：
<ul>
<li><em><strong>ASC</strong></em> <strong>升序</strong>(默认)</li>
<li><strong><em>DESC</em> 降序</strong>
字段1，字段2<strong>有</strong>先后顺序</li>
</ul>
</li>
</ol>
<h4 id="分页查询">分页查询<a hidden class="anchor" aria-hidden="true" href="#分页查询">#</a></h4>
<ol>
<li><em>SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;</em>
起始索引<strong>从0开始</strong>，为查询页的起始id
第一页可以写为 <em>LIMIT 查询记录数</em></li>
</ol>
<h4 id="顺序">顺序<a hidden class="anchor" aria-hidden="true" href="#顺序">#</a></h4>
<ol>
<li>编写顺序：
SELECT$\rightarrow$FROM$\rightarrow$WHERE$\rightarrow$GROUP BY$\rightarrow$HAVING$\rightarrow$ORDER BY$\rightarrow$LIMIT</li>
</ol>
<h3 id="dcl">DCL<a hidden class="anchor" aria-hidden="true" href="#dcl">#</a></h3>
<h4 id="管理用户">管理用户<a hidden class="anchor" aria-hidden="true" href="#管理用户">#</a></h4>
<ol>
<li><em>USE mysql</em>
<em>SELECT * FROM user</em>
查询用户</li>
<li><em>CREATE USER &lsquo;用户名&rsquo;@&lsquo;主机名&rsquo; IDENTIFIED BY &lsquo;密码&rsquo;;</em>
创建用户
<ul>
<li>主机名为 <em>%</em> 表示可在任意主机访问</li>
</ul>
</li>
<li><em>ALTER USER &lsquo;用户名&rsquo;@&lsquo;主机名&rsquo; IDENTIFIED WITH mysql_native_password BY &lsquo;新密码&rsquo;;</em>
修改密码</li>
<li><em>DROP USER &lsquo;用户名&rsquo;@&lsquo;主机名&rsquo;;</em>
删除用户</li>
</ol>
<h4 id="权限控制">权限控制<a hidden class="anchor" aria-hidden="true" href="#权限控制">#</a></h4>
<ol>
<li>常用权限类型：
<table>
  <thead>
      <tr>
          <th style="text-align: center">权限</th>
          <th style="text-align: center">说明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">ALL(PRIVILEGES)</td>
          <td style="text-align: center">所有权限</td>
      </tr>
      <tr>
          <td style="text-align: center">SELECT</td>
          <td style="text-align: center">查询</td>
      </tr>
      <tr>
          <td style="text-align: center">INSERT</td>
          <td style="text-align: center">插入</td>
      </tr>
      <tr>
          <td style="text-align: center">UPDATE</td>
          <td style="text-align: center">修改</td>
      </tr>
      <tr>
          <td style="text-align: center">DELETE</td>
          <td style="text-align: center">删除</td>
      </tr>
      <tr>
          <td style="text-align: center">ALTER</td>
          <td style="text-align: center">修改表</td>
      </tr>
      <tr>
          <td style="text-align: center">DROP</td>
          <td style="text-align: center">删除库/表/视图</td>
      </tr>
      <tr>
          <td style="text-align: center">CREATE</td>
          <td style="text-align: center">创建库/表</td>
      </tr>
  </tbody>
</table>
</li>
<li><em>SHOW GRANTS FOR &lsquo;用户名&rsquo;@&lsquo;主机名&rsquo;;</em>
查询权限</li>
<li><em>GRANT 权限列表 ON 数据库名.表名 TO &lsquo;用户名&rsquo;@&lsquo;主机名&rsquo;;</em>
授予权限
<ul>
<li>权限列表写 <em>ALL</em> 作通配</li>
</ul>
</li>
<li><em>REVOKE 权限列表 ON 数据库名.表名FROM &lsquo;用户名&rsquo;@&lsquo;主机名&rsquo;;</em>
撤销权限 数据库、表用***作通配</li>
</ol>
<h2 id="函数">函数<a hidden class="anchor" aria-hidden="true" href="#函数">#</a></h2>
<blockquote>
<p>使用 <em>SELECT 函数</em> 进行函数试验</p>
</blockquote>
<h3 id="字符串函数">字符串函数<a hidden class="anchor" aria-hidden="true" href="#字符串函数">#</a></h3>
<p>常用函数：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: center">函数</th>
          <th style="text-align: center">功能</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">CONCAT(S1,S2,…,Sn)</td>
          <td style="text-align: center">拼接字符串</td>
      </tr>
      <tr>
          <td style="text-align: center">LOWER(str)</td>
          <td style="text-align: center">全小写</td>
      </tr>
      <tr>
          <td style="text-align: center">UPPER(str)</td>
          <td style="text-align: center">全大写</td>
      </tr>
      <tr>
          <td style="text-align: center">LPAD(str,n,pad)</td>
          <td style="text-align: center">pad从左填充str到n长度</td>
      </tr>
      <tr>
          <td style="text-align: center">RPAD(str,n,pad)</td>
          <td style="text-align: center">pad从右填充str到n长度</td>
      </tr>
      <tr>
          <td style="text-align: center">TRIM(str)</td>
          <td style="text-align: center">去头尾空格</td>
      </tr>
      <tr>
          <td style="text-align: center">SUBSTRING(str,start,len)</td>
          <td style="text-align: center">返回str从start处起的len个字符</td>
      </tr>
  </tbody>
</table>
<ul>
<li>字符串从1开始 非0</li>
<li>主要结合前文<strong>语法</strong>进行应用</li>
</ul>
<h3 id="数值函数">数值函数<a hidden class="anchor" aria-hidden="true" href="#数值函数">#</a></h3>
<p>常见函数：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: center">函数</th>
          <th style="text-align: center">功能</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">CEIL(x)</td>
          <td style="text-align: center">向上取整</td>
      </tr>
      <tr>
          <td style="text-align: center">FLOOR(x)</td>
          <td style="text-align: center">向下取整</td>
      </tr>
      <tr>
          <td style="text-align: center">MOD(x,y)</td>
          <td style="text-align: center">x/y的模</td>
      </tr>
      <tr>
          <td style="text-align: center">RAND()</td>
          <td style="text-align: center">0~1内随机数</td>
      </tr>
      <tr>
          <td style="text-align: center">ROUND(x,y)</td>
          <td style="text-align: center">x四舍五入 y位小数</td>
      </tr>
  </tbody>
</table>
<h3 id="日期函数">日期函数<a hidden class="anchor" aria-hidden="true" href="#日期函数">#</a></h3>
<p>常见函数：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: center">函数</th>
          <th style="text-align: center">功能</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">CURDATE()</td>
          <td style="text-align: center">当前日期</td>
      </tr>
      <tr>
          <td style="text-align: center">CURTIME()</td>
          <td style="text-align: center">当前时间</td>
      </tr>
      <tr>
          <td style="text-align: center">NOW()</td>
          <td style="text-align: center">当前日期与时间</td>
      </tr>
      <tr>
          <td style="text-align: center">YEAR(date)</td>
          <td style="text-align: center">获得date的年份</td>
      </tr>
      <tr>
          <td style="text-align: center">MONTH(date)</td>
          <td style="text-align: center">date的月份</td>
      </tr>
      <tr>
          <td style="text-align: center">DAY(date)</td>
          <td style="text-align: center">date的日</td>
      </tr>
      <tr>
          <td style="text-align: center">DATE_ADD(date,INTERVAL expr type)</td>
          <td style="text-align: center">date加上时间间隔expr后的时间</td>
      </tr>
      <tr>
          <td style="text-align: center">DATEDIFF(date1,date2)</td>
          <td style="text-align: center">date1到date2的天数</td>
      </tr>
  </tbody>
</table>
<ul>
<li><em>DATE_ADD</em> 中 <em>expr</em> 可为数字 type可为 <em>DAY</em></li>
</ul>
<h3 id="流程控制函数">流程控制函数<a hidden class="anchor" aria-hidden="true" href="#流程控制函数">#</a></h3>
<p>常用函数：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: center">函数</th>
          <th style="text-align: center">功能</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">IF(v,t,f)</td>
          <td style="text-align: center">v为true返回t 否之为f</td>
      </tr>
      <tr>
          <td style="text-align: center">IFNULL(value1,value2)</td>
          <td style="text-align: center">v1不为空则返回v1 否之为v2</td>
      </tr>
      <tr>
          <td style="text-align: center">CASE WHEN [val1] THEN [res1] … ELSE [default] END</td>
          <td style="text-align: center">v1真则返回res1 否之为d</td>
      </tr>
      <tr>
          <td style="text-align: center">CASE [expr] WHEN [val1] THEN [res1] … ELSE [default] END</td>
          <td style="text-align: center">expr等于v1返回res1 否之为d</td>
      </tr>
  </tbody>
</table>
<ul>
<li>val1处不能并列多个val</li>
<li>用此类函数做筛选不用加where，格式为：==<em>SELECT *,(CASE …) AS &lsquo;别名&rsquo; FROM 表名</em>==</li>
</ul>
<h2 id="约束">约束<a hidden class="anchor" aria-hidden="true" href="#约束">#</a></h2>
<h3 id="约束概述">约束概述<a hidden class="anchor" aria-hidden="true" href="#约束概述">#</a></h3>
<blockquote>
<p>目的：保证数据库中数据的正确有效与完整</p>
</blockquote>
<h3 id="约束分类">约束分类<a hidden class="anchor" aria-hidden="true" href="#约束分类">#</a></h3>
<table>
  <thead>
      <tr>
          <th style="text-align: center">约束</th>
          <th style="text-align: center">描述</th>
          <th style="text-align: center">关键字</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">非空约束</td>
          <td style="text-align: center">该字段数据不为null</td>
          <td style="text-align: center">NOT NULL</td>
      </tr>
      <tr>
          <td style="text-align: center">唯一约束</td>
          <td style="text-align: center">该字段所有数据不重复</td>
          <td style="text-align: center">UNIQUE</td>
      </tr>
      <tr>
          <td style="text-align: center">主键约束</td>
          <td style="text-align: center">一行数据的唯一标识 非空且唯一</td>
          <td style="text-align: center">PRIMARY KEY</td>
      </tr>
      <tr>
          <td style="text-align: center">默认约束</td>
          <td style="text-align: center">未指定则采用默认值</td>
          <td style="text-align: center">DEFAULT 某</td>
      </tr>
      <tr>
          <td style="text-align: center">检查约束</td>
          <td style="text-align: center">保证字段满足某条件</td>
          <td style="text-align: center">CHECK</td>
      </tr>
  </tbody>
</table>
<ul>
<li><em>id int PRIMARY KEY AUTO_INCREMENT</em>主键且自动增长(多个约束用空格隔开)</li>
<li>作用于表中字段 创建/修改表时添加</li>
<li>一般把序号设为主键</li>
</ul>
<h3 id="外键约束">外键约束<a hidden class="anchor" aria-hidden="true" href="#外键约束">#</a></h3>
<ol>
<li>
<p>让两表数据建立连接 保证数据完整一致</p>
</li>
<li>
<p>具有外键的表=子表 被关联的表=亲表</p>
</li>
<li>
<p>格式：</p>
<ul>
<li>创建时添加 <em>[CONSTRAINT] [外键名] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)</em></li>
<li>修改时添加 <em>ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)</em>
<ul>
<li>外键名是给外键自定义的新名字</li>
<li>注意数据类型需完全相同</li>
</ul>
</li>
</ul>
</li>
<li>
<p><em>ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;</em>
删除外键</p>
</li>
<li>
<p><em>[ON UPDATE 模式 ON DELETE 模式]</em>
在添加语句后指定删除/更新模式</p>
</li>
</ol>
<table>
  <thead>
      <tr>
          <th style="text-align: center">模式</th>
          <th style="text-align: center">说明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">NO ACTION</td>
          <td style="text-align: center">有外键则不允许更新</td>
      </tr>
      <tr>
          <td style="text-align: center">RESTRICT</td>
          <td style="text-align: center">同上</td>
      </tr>
      <tr>
          <td style="text-align: center">CASCADE</td>
          <td style="text-align: center">亲子表同时更新</td>
      </tr>
      <tr>
          <td style="text-align: center">SET NULL</td>
          <td style="text-align: center">亲表删除 子表设null</td>
      </tr>
      <tr>
          <td style="text-align: center">SET DEFAULT</td>
          <td style="text-align: center">子表设为默认(Innodb不支持)</td>
      </tr>
  </tbody>
</table>
<h2 id="多表查询">多表查询<a hidden class="anchor" aria-hidden="true" href="#多表查询">#</a></h2>
<h3 id="多表关系">多表关系<a hidden class="anchor" aria-hidden="true" href="#多表关系">#</a></h3>
<ol>
<li>一对多：建立外键连接
eg.员工&amp;部门</li>
<li>多对多：建立第三表 至少包含两外键 分别关联两方主键
eg.学生&amp;课程</li>
<li>一对一：任意一方加外键 并设置为UNIQUE
<ul>
<li>多用于单表拆分 基础字段在一表 详情字段在另一表</li>
<li><em>UNIQUE</em> 在定义id的时候添加
eg.用户&amp;用户详情</li>
</ul>
</li>
</ol>
<h3 id="多表查询概述">多表查询概述<a hidden class="anchor" aria-hidden="true" href="#多表查询概述">#</a></h3>
<ol>
<li>并列多表时需要消除无效的笛卡尔积情况(指A*B)</li>
<li>分类：
<pre tabindex="0"><code class="language-mermaid" data-lang="mermaid">flowchart LR;
test((连接查询))
test--&gt;内连接
test--&gt;外连接
test--&gt;自连接
多表查询--&gt;test
多表查询--&gt;子查询
外连接--&gt;左外连接
外连接--&gt;右外连接
</code></pre></li>
</ol>
<h4 id="内连接">内连接<a hidden class="anchor" aria-hidden="true" href="#内连接">#</a></h4>
<p><strong>返回A B表的交集</strong></p>
<ol>
<li><em>SELECT 字段列表 FROM 表1,表2 WHERE 条件 …;</em>
隐式内连接
条件类似<em>employee.dept_id=dept.id</em></li>
<li><em>SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 …;</em>
显式内连接</li>
</ol>
<h4 id="外连接">外连接<a hidden class="anchor" aria-hidden="true" href="#外连接">#</a></h4>
<ol>
<li><em>SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 …;</em>
左外连接 查询左表与交集部分的数据</li>
<li><em>SELECT  字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 …;</em>
左外连接 右表&amp;交集</li>
</ol>
<h4 id="自连接">自连接<a hidden class="anchor" aria-hidden="true" href="#自连接">#</a></h4>
<ol>
<li><em>SELECT 字段列表 FROM 表1 别名1 JOIN 表1 别名2 ON 条件 …;</em>
可内连接也可外连接</li>
</ol>
<h4 id="联合查询">联合查询<a hidden class="anchor" aria-hidden="true" href="#联合查询">#</a></h4>
<ol>
<li><em>SELECT 字段列表 FROM 表1 …</em>
<em>UNION [ALL]</em>
<em>SELECT 字段列表 FROM 表2 …;</em>
有<em>ALL</em>结果直接合并 无<em>ALL</em>去重
字段列表与类型相同</li>
</ol>
<h4 id="子查询嵌套查询">子查询（嵌套查询）<a hidden class="anchor" aria-hidden="true" href="#子查询嵌套查询">#</a></h4>
<ol>
<li>外部可以是INSERT/UPDATE/DELETE/SELECT</li>
<li>根据子查询结果的不同分类：
<table>
  <thead>
      <tr>
          <th style="text-align: center">名称</th>
          <th style="text-align: center">意义</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">标量子查询</td>
          <td style="text-align: center">结果为单个值</td>
      </tr>
      <tr>
          <td style="text-align: center">列子查询</td>
          <td style="text-align: center">结果为一列</td>
      </tr>
      <tr>
          <td style="text-align: center">行子查询</td>
          <td style="text-align: center">为一行</td>
      </tr>
      <tr>
          <td style="text-align: center">表子查询</td>
          <td style="text-align: center">多行多列</td>
      </tr>
  </tbody>
</table>
</li>
<li>可在WHERE/FROM/SELECT之后进行</li>
</ol>
<h5 id="列子查询">列子查询<a hidden class="anchor" aria-hidden="true" href="#列子查询">#</a></h5>
<ul>
<li>返回一列结果 常用操作符：
<table>
  <thead>
      <tr>
          <th>操作符</th>
          <th>用途</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>==IN==</td>
          <td>集合范围之内 多选一</td>
      </tr>
      <tr>
          <td>NOT IN</td>
          <td>不在集合范围内</td>
      </tr>
      <tr>
          <td>ANY</td>
          <td>任意一个满足</td>
      </tr>
      <tr>
          <td>SOME</td>
          <td>同ANY</td>
      </tr>
      <tr>
          <td>ALL</td>
          <td>所有值都满足</td>
      </tr>
  </tbody>
</table>
</li>
</ul>
<h5 id="行子查询">行子查询<a hidden class="anchor" aria-hidden="true" href="#行子查询">#</a></h5>
<ol>
<li>常用操作符 =、&lt;&gt;、IN、NOT IN
<ul>
<li>可以用 (1200,1)=(salary,manager) 表示一一对应</li>
</ul>
</li>
</ol>
<h5 id="表子查询">表子查询<a hidden class="anchor" aria-hidden="true" href="#表子查询">#</a></h5>
<ol>
<li>常用操作符 IN</li>
</ol>
<h2 id="事务">事务<a hidden class="anchor" aria-hidden="true" href="#事务">#</a></h2>
<h3 id="操作">操作<a hidden class="anchor" aria-hidden="true" href="#操作">#</a></h3>
<ol>
<li>简介：一组操作的集合 整体提交</li>
<li>自动开始
<em>SELECT @@AUTOCOMMIT;</em>
开始事务(自动提交)
<em>SELECT @@AUTOCOMMIT=0;</em>
……
<em>COMMIT;</em>
手动提交事务
<em>ROLLBACK;</em>
事务回滚</li>
<li>手动开始
<em>START TRANSACTION;</em>
开启事务
<em>COMMIT;</em>
提交事务
<em>ROLLBACK;</em>
回滚事务</li>
</ol>
<h3 id="特性">特性<a hidden class="anchor" aria-hidden="true" href="#特性">#</a></h3>
<ol>
<li>原子性 不可分割的最小操作单元</li>
<li>一致性 事务完成时所有数据保持一致状态</li>
<li>隔离性 数据库的隔离机制，事务进行不受外部并发操作影响</li>
<li>持久性 提交或回滚后，数据的改变是永久的
==<strong>ACID模型</strong>==</li>
</ol>
<h3 id="并发事务问题">并发事务问题<a hidden class="anchor" aria-hidden="true" href="#并发事务问题">#</a></h3>
<ol>
<li>脏读 一个事务读到另一个事务未提交的数据</li>
<li>不可重复读 先后读取同一记录但数据不同</li>
<li>幻读 按条件查询数据，无对应数据行，但插入数据时发现该行数据已存在</li>
</ol>
<h3 id="事务隔离级别">事务隔离级别<a hidden class="anchor" aria-hidden="true" href="#事务隔离级别">#</a></h3>
<ol>
<li>分类：
<table>
  <thead>
      <tr>
          <th style="text-align: center">隔离级别</th>
          <th style="text-align: center">脏读</th>
          <th style="text-align: center">不可重复读</th>
          <th style="text-align: center">幻读</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center">READ UNCOMMITTED</td>
          <td style="text-align: center">✔</td>
          <td style="text-align: center">✔</td>
          <td style="text-align: center">✔</td>
      </tr>
      <tr>
          <td style="text-align: center">READ COMMITTED</td>
          <td style="text-align: center">✖</td>
          <td style="text-align: center">✔</td>
          <td style="text-align: center">✔</td>
      </tr>
      <tr>
          <td style="text-align: center">REPEATABLE READ(默认)</td>
          <td style="text-align: center">✖</td>
          <td style="text-align: center">✖</td>
          <td style="text-align: center">✔</td>
      </tr>
      <tr>
          <td style="text-align: center">SERIALIZABLE</td>
          <td style="text-align: center">✖</td>
          <td style="text-align: center">✖</td>
          <td style="text-align: center">✖</td>
      </tr>
  </tbody>
</table>
<ul>
<li>ORACLE默认READ COMMITTED</li>
<li>性能递减 安全性递增</li>
</ul>
</li>
<li><em>SELECT @@TRANSACTION_ISOLATION;</em>
查看事务隔离级别</li>
<li><em>SET [SESSION或GLOBAL] TRANSACTION ISOLATION LEVEL {隔离级别};</em>
设定隔离级别 SESSION为当前连接 GLOBAL为全局，不包含当前连接</li>
</ol>


    

  
<script type="module">  
    import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; 
    mermaid.initialize({ startOnLoad: true });  
</script>  
<script>  
    
    Array.from(document.getElementsByClassName("language-mermaid")).forEach(  
        (el) => {  
            el.parentElement.outerHTML = `<div class="mermaid">${el.innerHTML}</div>`;  
        }  
    );  
</script>  
<style>  
       
    .mermaid svg {  
        display: block;  
        margin: auto;  
    }  
</style>  
</div>

  <footer class="post-footer">
    <ul class="post-tags">
      <li><a href="https://Sattiluvcat.github.io/en/tags/mysql/">MySql</a></li>
    </ul>


<ul class="share-buttons">
    <li>
        <a target="_blank" rel="noopener noreferrer" aria-label="share MySql基础 on x"
            href="https://x.com/intent/tweet/?text=MySql%e5%9f%ba%e7%a1%80&amp;url=https%3a%2f%2fSattiluvcat.github.io%2fen%2fposts%2fjava%2fmysql_base%2f&amp;hashtags=MySql">
            <svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
                <path
                    d="M512 62.554 L 512 449.446 C 512 483.97 483.97 512 449.446 512 L 62.554 512 C 28.03 512 0 483.97 0 449.446 L 0 62.554 C 0 28.03 28.029 0 62.554 0 L 449.446 0 C 483.971 0 512 28.03 512 62.554 Z M 269.951 190.75 L 182.567 75.216 L 56 75.216 L 207.216 272.95 L 63.9 436.783 L 125.266 436.783 L 235.9 310.383 L 332.567 436.783 L 456 436.783 L 298.367 228.367 L 432.367 75.216 L 371.033 75.216 Z M 127.633 110 L 164.101 110 L 383.481 400.065 L 349.5 400.065 Z" />
            </svg>
        </a>
    </li>
    <li>
        <a target="_blank" rel="noopener noreferrer" aria-label="share MySql基础 on linkedin"
            href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https%3a%2f%2fSattiluvcat.github.io%2fen%2fposts%2fjava%2fmysql_base%2f&amp;title=MySql%e5%9f%ba%e7%a1%80&amp;summary=MySql%e5%9f%ba%e7%a1%80&amp;source=https%3a%2f%2fSattiluvcat.github.io%2fen%2fposts%2fjava%2fmysql_base%2f">
            <svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
                <path
                    d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-288.985,423.278l0,-225.717l-75.04,0l0,225.717l75.04,0Zm270.539,0l0,-129.439c0,-69.333 -37.018,-101.586 -86.381,-101.586c-39.804,0 -57.634,21.891 -67.617,37.266l0,-31.958l-75.021,0c0.995,21.181 0,225.717 0,225.717l75.02,0l0,-126.056c0,-6.748 0.486,-13.492 2.474,-18.315c5.414,-13.475 17.767,-27.434 38.494,-27.434c27.135,0 38.007,20.707 38.007,51.037l0,120.768l75.024,0Zm-307.552,-334.556c-25.674,0 -42.448,16.879 -42.448,39.002c0,21.658 16.264,39.002 41.455,39.002l0.484,0c26.165,0 42.452,-17.344 42.452,-39.002c-0.485,-22.092 -16.241,-38.954 -41.943,-39.002Z" />
            </svg>
        </a>
    </li>
    <li>
        <a target="_blank" rel="noopener noreferrer" aria-label="share MySql基础 on reddit"
            href="https://reddit.com/submit?url=https%3a%2f%2fSattiluvcat.github.io%2fen%2fposts%2fjava%2fmysql_base%2f&title=MySql%e5%9f%ba%e7%a1%80">
            <svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
                <path
                    d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-3.446,265.638c0,-22.964 -18.616,-41.58 -41.58,-41.58c-11.211,0 -21.361,4.457 -28.841,11.666c-28.424,-20.508 -67.586,-33.757 -111.204,-35.278l18.941,-89.121l61.884,13.157c0.756,15.734 13.642,28.29 29.56,28.29c16.407,0 29.706,-13.299 29.706,-29.701c0,-16.403 -13.299,-29.702 -29.706,-29.702c-11.666,0 -21.657,6.792 -26.515,16.578l-69.105,-14.69c-1.922,-0.418 -3.939,-0.042 -5.585,1.036c-1.658,1.073 -2.811,2.761 -3.224,4.686l-21.152,99.438c-44.258,1.228 -84.046,14.494 -112.837,35.232c-7.468,-7.164 -17.589,-11.591 -28.757,-11.591c-22.965,0 -41.585,18.616 -41.585,41.58c0,16.896 10.095,31.41 24.568,37.918c-0.639,4.135 -0.99,8.328 -0.99,12.576c0,63.977 74.469,115.836 166.33,115.836c91.861,0 166.334,-51.859 166.334,-115.836c0,-4.218 -0.347,-8.387 -0.977,-12.493c14.564,-6.47 24.735,-21.034 24.735,-38.001Zm-119.474,108.193c-20.27,20.241 -59.115,21.816 -70.534,21.816c-11.428,0 -50.277,-1.575 -70.522,-21.82c-3.007,-3.008 -3.007,-7.882 0,-10.889c3.003,-2.999 7.882,-3.003 10.885,0c12.777,12.781 40.11,17.317 59.637,17.317c19.522,0 46.86,-4.536 59.657,-17.321c3.016,-2.999 7.886,-2.995 10.885,0.008c3.008,3.011 3.003,7.882 -0.008,10.889Zm-5.23,-48.781c-16.373,0 -29.701,-13.324 -29.701,-29.698c0,-16.381 13.328,-29.714 29.701,-29.714c16.378,0 29.706,13.333 29.706,29.714c0,16.374 -13.328,29.698 -29.706,29.698Zm-160.386,-29.702c0,-16.381 13.328,-29.71 29.714,-29.71c16.369,0 29.689,13.329 29.689,29.71c0,16.373 -13.32,29.693 -29.689,29.693c-16.386,0 -29.714,-13.32 -29.714,-29.693Z" />
            </svg>
        </a>
    </li>
    <li>
        <a target="_blank" rel="noopener noreferrer" aria-label="share MySql基础 on facebook"
            href="https://facebook.com/sharer/sharer.php?u=https%3a%2f%2fSattiluvcat.github.io%2fen%2fposts%2fjava%2fmysql_base%2f">
            <svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
                <path
                    d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-106.468,0l0,-192.915l66.6,0l12.672,-82.621l-79.272,0l0,-53.617c0,-22.603 11.073,-44.636 46.58,-44.636l36.042,0l0,-70.34c0,0 -32.71,-5.582 -63.982,-5.582c-65.288,0 -107.96,39.569 -107.96,111.204l0,62.971l-72.573,0l0,82.621l72.573,0l0,192.915l-191.104,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Z" />
            </svg>
        </a>
    </li>
    <li>
        <a target="_blank" rel="noopener noreferrer" aria-label="share MySql基础 on whatsapp"
            href="https://api.whatsapp.com/send?text=MySql%e5%9f%ba%e7%a1%80%20-%20https%3a%2f%2fSattiluvcat.github.io%2fen%2fposts%2fjava%2fmysql_base%2f">
            <svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
                <path
                    d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-58.673,127.703c-33.842,-33.881 -78.847,-52.548 -126.798,-52.568c-98.799,0 -179.21,80.405 -179.249,179.234c-0.013,31.593 8.241,62.428 23.927,89.612l-25.429,92.884l95.021,-24.925c26.181,14.28 55.659,21.807 85.658,21.816l0.074,0c98.789,0 179.206,-80.413 179.247,-179.243c0.018,-47.895 -18.61,-92.93 -52.451,-126.81Zm-126.797,275.782l-0.06,0c-26.734,-0.01 -52.954,-7.193 -75.828,-20.767l-5.441,-3.229l-56.386,14.792l15.05,-54.977l-3.542,-5.637c-14.913,-23.72 -22.791,-51.136 -22.779,-79.287c0.033,-82.142 66.867,-148.971 149.046,-148.971c39.793,0.014 77.199,15.531 105.329,43.692c28.128,28.16 43.609,65.592 43.594,105.4c-0.034,82.149 -66.866,148.983 -148.983,148.984Zm81.721,-111.581c-4.479,-2.242 -26.499,-13.075 -30.604,-14.571c-4.105,-1.495 -7.091,-2.241 -10.077,2.241c-2.986,4.483 -11.569,14.572 -14.182,17.562c-2.612,2.988 -5.225,3.364 -9.703,1.12c-4.479,-2.241 -18.91,-6.97 -36.017,-22.23c-13.314,-11.876 -22.304,-26.542 -24.916,-31.026c-2.612,-4.484 -0.279,-6.908 1.963,-9.14c2.016,-2.007 4.48,-5.232 6.719,-7.847c2.24,-2.615 2.986,-4.484 4.479,-7.472c1.493,-2.99 0.747,-5.604 -0.374,-7.846c-1.119,-2.241 -10.077,-24.288 -13.809,-33.256c-3.635,-8.733 -7.327,-7.55 -10.077,-7.688c-2.609,-0.13 -5.598,-0.158 -8.583,-0.158c-2.986,0 -7.839,1.121 -11.944,5.604c-4.105,4.484 -15.675,15.32 -15.675,37.364c0,22.046 16.048,43.342 18.287,46.332c2.24,2.99 31.582,48.227 76.511,67.627c10.685,4.615 19.028,7.371 25.533,9.434c10.728,3.41 20.492,2.929 28.209,1.775c8.605,-1.285 26.499,-10.833 30.231,-21.295c3.732,-10.464 3.732,-19.431 2.612,-21.298c-1.119,-1.869 -4.105,-2.99 -8.583,-5.232Z" />
            </svg>
        </a>
    </li>
    <li>
        <a target="_blank" rel="noopener noreferrer" aria-label="share MySql基础 on telegram"
            href="https://telegram.me/share/url?text=MySql%e5%9f%ba%e7%a1%80&amp;url=https%3a%2f%2fSattiluvcat.github.io%2fen%2fposts%2fjava%2fmysql_base%2f">
            <svg version="1.1" xml:space="preserve" viewBox="2 2 28 28" height="30px" width="30px" fill="currentColor">
                <path
                    d="M26.49,29.86H5.5a3.37,3.37,0,0,1-2.47-1,3.35,3.35,0,0,1-1-2.47V5.48A3.36,3.36,0,0,1,3,3,3.37,3.37,0,0,1,5.5,2h21A3.38,3.38,0,0,1,29,3a3.36,3.36,0,0,1,1,2.46V26.37a3.35,3.35,0,0,1-1,2.47A3.38,3.38,0,0,1,26.49,29.86Zm-5.38-6.71a.79.79,0,0,0,.85-.66L24.73,9.24a.55.55,0,0,0-.18-.46.62.62,0,0,0-.41-.17q-.08,0-16.53,6.11a.59.59,0,0,0-.41.59.57.57,0,0,0,.43.52l4,1.24,1.61,4.83a.62.62,0,0,0,.63.43.56.56,0,0,0,.4-.17L16.54,20l4.09,3A.9.9,0,0,0,21.11,23.15ZM13.8,20.71l-1.21-4q8.72-5.55,8.78-5.55c.15,0,.23,0,.23.16a.18.18,0,0,1,0,.06s-2.51,2.3-7.52,6.8Z" />
            </svg>
        </a>
    </li>
    <li>
        <a target="_blank" rel="noopener noreferrer" aria-label="share MySql基础 on ycombinator"
            href="https://news.ycombinator.com/submitlink?t=MySql%e5%9f%ba%e7%a1%80&u=https%3a%2f%2fSattiluvcat.github.io%2fen%2fposts%2fjava%2fmysql_base%2f">
            <svg version="1.1" xml:space="preserve" width="30px" height="30px" viewBox="0 0 512 512" fill="currentColor"
                xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
                <path
                    d="M449.446 0C483.971 0 512 28.03 512 62.554L512 449.446C512 483.97 483.97 512 449.446 512L62.554 512C28.03 512 0 483.97 0 449.446L0 62.554C0 28.03 28.029 0 62.554 0L449.446 0ZM183.8767 87.9921H121.8427L230.6673 292.4508V424.0079H281.3328V292.4508L390.1575 87.9921H328.1233L256 238.2489z" />
            </svg>
        </a>
    </li>
</ul>

  </footer><div id="disqus_thread"></div>
<script>
    

    

    (function() { 
    var d = document, s = d.createElement('script');
    s.src = 'https://www-sattiluvcat-github-io.disqus.com/embed.js';
    s.setAttribute('data-timestamp', +new Date());
    (d.head || d.body).appendChild(s);
    })();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
  <script id="dsq-count-scr" src="//www-sattiluvcat-github-io.disqus.com/count.js" async></script>
</article>
    </main>
    
<footer class="footer">
        <span>&copy; 2024 <a href="https://Sattiluvcat.github.io/en/">Satti&#39;s Blog</a></span> · 

    <span>
        Powered by
        <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
        <a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
    </span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
        <path d="M12 6H0l6-6z" />
    </svg>
</a>

<script>
    let menu = document.getElementById('menu')
    if (menu) {
        menu.scrollLeft = localStorage.getItem("menu-scroll-position");
        menu.onscroll = function () {
            localStorage.setItem("menu-scroll-position", menu.scrollLeft);
        }
    }

    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
        anchor.addEventListener("click", function (e) {
            e.preventDefault();
            var id = this.getAttribute("href").substr(1);
            if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
                    behavior: "smooth"
                });
            } else {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
            }
            if (id === "top") {
                history.replaceState(null, null, " ");
            } else {
                history.pushState(null, null, `#${id}`);
            }
        });
    });

</script>
<script>
    var mybutton = document.getElementById("top-link");
    window.onscroll = function () {
        if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
            mybutton.style.visibility = "visible";
            mybutton.style.opacity = "1";
        } else {
            mybutton.style.visibility = "hidden";
            mybutton.style.opacity = "0";
        }
    };

</script>
<script>
    document.getElementById("theme-toggle").addEventListener("click", () => {
        if (document.body.className.includes("dark")) {
            document.body.classList.remove('dark');
            localStorage.setItem("pref-theme", 'light');
        } else {
            document.body.classList.add('dark');
            localStorage.setItem("pref-theme", 'dark');
        }
    })

</script>
<script>
    document.querySelectorAll('pre > code').forEach((codeblock) => {
        const container = codeblock.parentNode.parentNode;

        const copybutton = document.createElement('button');
        copybutton.classList.add('copy-code');
        copybutton.innerHTML = 'copy';

        function copyingDone() {
            copybutton.innerHTML = 'copied!';
            setTimeout(() => {
                copybutton.innerHTML = 'copy';
            }, 2000);
        }

        copybutton.addEventListener('click', (cb) => {
            if ('clipboard' in navigator) {
                navigator.clipboard.writeText(codeblock.textContent);
                copyingDone();
                return;
            }

            const range = document.createRange();
            range.selectNodeContents(codeblock);
            const selection = window.getSelection();
            selection.removeAllRanges();
            selection.addRange(range);
            try {
                document.execCommand('copy');
                copyingDone();
            } catch (e) { };
            selection.removeRange(range);
        });

        if (container.classList.contains("highlight")) {
            container.appendChild(copybutton);
        } else if (container.parentNode.firstChild == container) {
            
        } else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
            
            codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
        } else {
            
            codeblock.parentNode.appendChild(copybutton);
        }
    });
</script>
</body>

</html>
